package DevCode.Negocio;

import java.util.Collection;

import DevCode.DAO.UsuarioDAO;
import DevCode.Excepcion.DAOExcepcion;
import DevCode.Excepcion.LoginExcepcion;
import DevCode.Modelo.Usuario;

public class GestionUsuario {

	public Usuario validarUsuario(String email, String clave)
			throws DAOExcepcion, LoginExcepcion {
		UsuarioDAO dao = new UsuarioDAO();
		return dao.validarUsuario(email, clave);
	}
	
	public Collection<Usuario> buscarUsuario(String USvnombres, int CFicodigo, int busqueda)
			throws DAOExcepcion {
		UsuarioDAO dao = new UsuarioDAO();
		return dao.buscarUsuario(USvnombres, CFicodigo, busqueda);
	}
	
	public Collection<Usuario> ConsultarUsuario(String USvnumdocumento, String USvcorreo)
			throws DAOExcepcion {
		UsuarioDAO dao = new UsuarioDAO();
		return dao.ConsultarUsuario(USvnumdocumento, USvcorreo);
	}
	
	public Usuario obtenerUsuario(int USicodigo) throws DAOExcepcion {
		UsuarioDAO dao = new UsuarioDAO();
		return dao.obtenerUsuario(USicodigo);
	}
	
	public String insertarUsuario(String USvnombres, String USvapaterno, String USvamaterno, String UScsexo, String USvtipodocumento, 
			String USvnumdocumento, String USvnumcelular, String USvcorreo, String USvpassword, String USvtipousuario, Boolean USiestado, int CFicodigo)
			throws DAOExcepcion {
		GestionUsuario negocio = new GestionUsuario();
		Collection<Usuario> lista = negocio.ConsultarUsuario(USvnumdocumento, USvcorreo);
		String mensaje="";
		if(lista.size() != 0) { 
			for(Usuario u : lista) {
				if(u.getUSvnumdocumento().equals(USvnumdocumento)){
					mensaje = "ERROR: El numero de documento ya existe";
				}else{
					if(u.getUSvcorreo().equals(USvcorreo)){
						mensaje = "ERROR: El email ya se encuentra registrado";
					}
				}
			}
		}else{
			UsuarioDAO dao = new UsuarioDAO();
			Usuario u = new Usuario();
			u.setUSvnombres(USvnombres);
			u.setUSvapaterno(USvapaterno);
			u.setUSvamaterno(USvamaterno);
			u.setUScsexo(UScsexo);
			u.setUSvtipodocumento(USvtipodocumento);
			u.setUSvnumdocumento(USvnumdocumento);
			u.setUSvnumcelular(USvnumcelular);
			u.setUSvcorreo(USvcorreo);
			u.setUSvpassword(USvpassword);
			u.setUSvtipousuario(USvtipousuario);
			u.setUSiestado(USiestado);
			u.setCFicodigo(CFicodigo);
			dao.guardarUsuario(u,1);
			mensaje = "Usuario registrado exitosamente";
		}
		return mensaje;
	}
	
	public String actualizarUsuario(int USicodigo, String USvnombres, String USvapaterno, String USvamaterno, String UScsexo, String USvtipodocumento, 
			String USvnumdocumento, String USvnumcelular, String USvcorreo, String USvpassword, String USvtipousuario, Boolean USiestado, int CFicodigo)
			throws DAOExcepcion {
		GestionUsuario negocio = new GestionUsuario();
		String mensaje="";
		Boolean ok = false;
		int cont = 0;
		Usuario usuario = negocio.obtenerUsuario(USicodigo);
		if(usuario.getUSvnumdocumento().equals(USvnumdocumento) && usuario.getUSvcorreo().equals(USvcorreo)){	
			ok = true;
		}else{
			Collection<Usuario> lista = negocio.ConsultarUsuario(USvnumdocumento, USvcorreo);
			if(lista.size() != 0) { 
				for(Usuario u : lista) {
					if(u.getUSvnumdocumento().equals(USvnumdocumento) && u.getUSicodigo() != USicodigo){
						mensaje = "ERROR: El numero de documento ya existe";
						cont++;
						break;
					}else{
						if(u.getUSvcorreo().equals(USvcorreo) && u.getUSicodigo() != USicodigo){
							mensaje = "ERROR: El email ya se encuentra registrado";
							cont++;
							break;
						}
					}
				}
				if(cont==0){
					ok = true;
				}else{
					ok = false;
				}
			}else{
				ok = true;
			}
		}
		if (ok == true){
			UsuarioDAO dao = new UsuarioDAO();
			Usuario u = new Usuario();
			u.setUSicodigo(USicodigo);
			u.setUSvnombres(USvnombres);
			u.setUSvapaterno(USvapaterno);
			u.setUSvamaterno(USvamaterno);
			u.setUScsexo(UScsexo);
			u.setUSvtipodocumento(USvtipodocumento);
			u.setUSvnumdocumento(USvnumdocumento);
			u.setUSvnumcelular(USvnumcelular);
			u.setUSvcorreo(USvcorreo);
			u.setUSvpassword(USvpassword);
			u.setUSvtipousuario(USvtipousuario);
			u.setUSiestado(USiestado);
			u.setCFicodigo(CFicodigo);
			dao.guardarUsuario(u,0);
			mensaje = "Usuario actualizado exitosamente";
		}
		return mensaje;
	}
	
	public void eliminarUsuario(int USicodigo) throws DAOExcepcion {
		UsuarioDAO dao = new UsuarioDAO();
		dao.eliminarUsuario(USicodigo);
	}
	
}
